<?php
/*
 * Copyright (c) 2017-2025 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
namespace TencentCloud\Emr\V20190103\Models;
use TencentCloud\Common\AbstractModel;

/**
 * DescribeSLInstance response structure.
 *
 * @method string getInstanceId() Obtain Character string identifier of the instance.
 * @method void setInstanceId(string $InstanceId) Set Character string identifier of the instance.
 * @method string getInstanceName() Obtain Instance name.
 * @method void setInstanceName(string $InstanceName) Set Instance name.
 * @method integer getPayMode() Obtain Instance billing mode. 0 indicates postpaid, i.e., pay-as-you-go; 1 indicates prepaid, i.e., monthly subscription.
 * @method void setPayMode(integer $PayMode) Set Instance billing mode. 0 indicates postpaid, i.e., pay-as-you-go; 1 indicates prepaid, i.e., monthly subscription.
 * @method string getDiskType() Obtain Instance storage type.
 * @method void setDiskType(string $DiskType) Set Instance storage type.
 * @method integer getDiskSize() Obtain Instance single-node disk capacity, in GB.
 * @method void setDiskSize(integer $DiskSize) Set Instance single-node disk capacity, in GB.
 * @method string getNodeType() Obtain Instance node specifications.
 * @method void setNodeType(string $NodeType) Set Instance node specifications.
 * @method array getZoneSettings() Obtain Detailed configuration of the instance AZ, including the AZ name, VPC information, and number of nodes.
 * @method void setZoneSettings(array $ZoneSettings) Set Detailed configuration of the instance AZ, including the AZ name, VPC information, and number of nodes.
 * @method array getTags() Obtain List of tags bound to the instance.
Note: This field may return null, indicating that no valid values can be obtained.
 * @method void setTags(array $Tags) Set List of tags bound to the instance.
Note: This field may return null, indicating that no valid values can be obtained.
 * @method integer getClusterId() Obtain Numeric identifier of the instance.
 * @method void setClusterId(integer $ClusterId) Set Numeric identifier of the instance.
 * @method integer getRegionId() Obtain Instance region ID.
 * @method void setRegionId(integer $RegionId) Set Instance region ID.
 * @method string getZone() Obtain Primary AZ of the instance.
 * @method void setZone(string $Zone) Set Primary AZ of the instance.
 * @method string getExpireTime() Obtain Instance expiration time. For post-paid instances, the API returns 0000-00-00 00:00:00.
 * @method void setExpireTime(string $ExpireTime) Set Instance expiration time. For post-paid instances, the API returns 0000-00-00 00:00:00.
 * @method string getIsolateTime() Obtain Instance isolation time. For instances that are not isolated, the API returns 0000-00-00 00:00:00.
 * @method void setIsolateTime(string $IsolateTime) Set Instance isolation time. For instances that are not isolated, the API returns 0000-00-00 00:00:00.
 * @method string getCreateTime() Obtain Instance creation time.
 * @method void setCreateTime(string $CreateTime) Set Instance creation time.
 * @method integer getStatus() Obtain Instance status code: -2: "TERMINATED", 2: "RUNNING", 14: "TERMINATING", 19: "ISOLATING", 22: "ADJUSTING", and 201: "ISOLATED".
 * @method void setStatus(integer $Status) Set Instance status code: -2: "TERMINATED", 2: "RUNNING", 14: "TERMINATING", 19: "ISOLATING", 22: "ADJUSTING", and 201: "ISOLATED".
 * @method integer getAutoRenewFlag() Obtain Auto-renewal flag. 0: notify before expiration but do not auto-renew; 1: notify before expiration and auto-renew; and 2: do not notify before expiration and do not auto-renew. If the business does not support renewal, the value is 0.
 * @method void setAutoRenewFlag(integer $AutoRenewFlag) Set Auto-renewal flag. 0: notify before expiration but do not auto-renew; 1: notify before expiration and auto-renew; and 2: do not notify before expiration and do not auto-renew. If the business does not support renewal, the value is 0.
 * @method integer getNodeNum() Obtain Total number of instance nodes.
 * @method void setNodeNum(integer $NodeNum) Set Total number of instance nodes.
 * @method array getSLInstance() Obtain 
 * @method void setSLInstance(array $SLInstance) Set 
 * @method string getRequestId() Obtain The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
 * @method void setRequestId(string $RequestId) Set The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
 */
class DescribeSLInstanceResponse extends AbstractModel
{
    /**
     * @var string Character string identifier of the instance.
     */
    public $InstanceId;

    /**
     * @var string Instance name.
     */
    public $InstanceName;

    /**
     * @var integer Instance billing mode. 0 indicates postpaid, i.e., pay-as-you-go; 1 indicates prepaid, i.e., monthly subscription.
     */
    public $PayMode;

    /**
     * @var string Instance storage type.
     */
    public $DiskType;

    /**
     * @var integer Instance single-node disk capacity, in GB.
     */
    public $DiskSize;

    /**
     * @var string Instance node specifications.
     */
    public $NodeType;

    /**
     * @var array Detailed configuration of the instance AZ, including the AZ name, VPC information, and number of nodes.
     */
    public $ZoneSettings;

    /**
     * @var array List of tags bound to the instance.
Note: This field may return null, indicating that no valid values can be obtained.
     */
    public $Tags;

    /**
     * @var integer Numeric identifier of the instance.
     */
    public $ClusterId;

    /**
     * @var integer Instance region ID.
     */
    public $RegionId;

    /**
     * @var string Primary AZ of the instance.
     */
    public $Zone;

    /**
     * @var string Instance expiration time. For post-paid instances, the API returns 0000-00-00 00:00:00.
     */
    public $ExpireTime;

    /**
     * @var string Instance isolation time. For instances that are not isolated, the API returns 0000-00-00 00:00:00.
     */
    public $IsolateTime;

    /**
     * @var string Instance creation time.
     */
    public $CreateTime;

    /**
     * @var integer Instance status code: -2: "TERMINATED", 2: "RUNNING", 14: "TERMINATING", 19: "ISOLATING", 22: "ADJUSTING", and 201: "ISOLATED".
     */
    public $Status;

    /**
     * @var integer Auto-renewal flag. 0: notify before expiration but do not auto-renew; 1: notify before expiration and auto-renew; and 2: do not notify before expiration and do not auto-renew. If the business does not support renewal, the value is 0.
     */
    public $AutoRenewFlag;

    /**
     * @var integer Total number of instance nodes.
     */
    public $NodeNum;

    /**
     * @var array 
     */
    public $SLInstance;

    /**
     * @var string The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
     */
    public $RequestId;

    /**
     * @param string $InstanceId Character string identifier of the instance.
     * @param string $InstanceName Instance name.
     * @param integer $PayMode Instance billing mode. 0 indicates postpaid, i.e., pay-as-you-go; 1 indicates prepaid, i.e., monthly subscription.
     * @param string $DiskType Instance storage type.
     * @param integer $DiskSize Instance single-node disk capacity, in GB.
     * @param string $NodeType Instance node specifications.
     * @param array $ZoneSettings Detailed configuration of the instance AZ, including the AZ name, VPC information, and number of nodes.
     * @param array $Tags List of tags bound to the instance.
Note: This field may return null, indicating that no valid values can be obtained.
     * @param integer $ClusterId Numeric identifier of the instance.
     * @param integer $RegionId Instance region ID.
     * @param string $Zone Primary AZ of the instance.
     * @param string $ExpireTime Instance expiration time. For post-paid instances, the API returns 0000-00-00 00:00:00.
     * @param string $IsolateTime Instance isolation time. For instances that are not isolated, the API returns 0000-00-00 00:00:00.
     * @param string $CreateTime Instance creation time.
     * @param integer $Status Instance status code: -2: "TERMINATED", 2: "RUNNING", 14: "TERMINATING", 19: "ISOLATING", 22: "ADJUSTING", and 201: "ISOLATED".
     * @param integer $AutoRenewFlag Auto-renewal flag. 0: notify before expiration but do not auto-renew; 1: notify before expiration and auto-renew; and 2: do not notify before expiration and do not auto-renew. If the business does not support renewal, the value is 0.
     * @param integer $NodeNum Total number of instance nodes.
     * @param array $SLInstance 
     * @param string $RequestId The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
     */
    function __construct()
    {

    }

    /**
     * For internal only. DO NOT USE IT.
     */
    public function deserialize($param)
    {
        if ($param === null) {
            return;
        }
        if (array_key_exists("InstanceId",$param) and $param["InstanceId"] !== null) {
            $this->InstanceId = $param["InstanceId"];
        }

        if (array_key_exists("InstanceName",$param) and $param["InstanceName"] !== null) {
            $this->InstanceName = $param["InstanceName"];
        }

        if (array_key_exists("PayMode",$param) and $param["PayMode"] !== null) {
            $this->PayMode = $param["PayMode"];
        }

        if (array_key_exists("DiskType",$param) and $param["DiskType"] !== null) {
            $this->DiskType = $param["DiskType"];
        }

        if (array_key_exists("DiskSize",$param) and $param["DiskSize"] !== null) {
            $this->DiskSize = $param["DiskSize"];
        }

        if (array_key_exists("NodeType",$param) and $param["NodeType"] !== null) {
            $this->NodeType = $param["NodeType"];
        }

        if (array_key_exists("ZoneSettings",$param) and $param["ZoneSettings"] !== null) {
            $this->ZoneSettings = [];
            foreach ($param["ZoneSettings"] as $key => $value){
                $obj = new ZoneSetting();
                $obj->deserialize($value);
                array_push($this->ZoneSettings, $obj);
            }
        }

        if (array_key_exists("Tags",$param) and $param["Tags"] !== null) {
            $this->Tags = [];
            foreach ($param["Tags"] as $key => $value){
                $obj = new Tag();
                $obj->deserialize($value);
                array_push($this->Tags, $obj);
            }
        }

        if (array_key_exists("ClusterId",$param) and $param["ClusterId"] !== null) {
            $this->ClusterId = $param["ClusterId"];
        }

        if (array_key_exists("RegionId",$param) and $param["RegionId"] !== null) {
            $this->RegionId = $param["RegionId"];
        }

        if (array_key_exists("Zone",$param) and $param["Zone"] !== null) {
            $this->Zone = $param["Zone"];
        }

        if (array_key_exists("ExpireTime",$param) and $param["ExpireTime"] !== null) {
            $this->ExpireTime = $param["ExpireTime"];
        }

        if (array_key_exists("IsolateTime",$param) and $param["IsolateTime"] !== null) {
            $this->IsolateTime = $param["IsolateTime"];
        }

        if (array_key_exists("CreateTime",$param) and $param["CreateTime"] !== null) {
            $this->CreateTime = $param["CreateTime"];
        }

        if (array_key_exists("Status",$param) and $param["Status"] !== null) {
            $this->Status = $param["Status"];
        }

        if (array_key_exists("AutoRenewFlag",$param) and $param["AutoRenewFlag"] !== null) {
            $this->AutoRenewFlag = $param["AutoRenewFlag"];
        }

        if (array_key_exists("NodeNum",$param) and $param["NodeNum"] !== null) {
            $this->NodeNum = $param["NodeNum"];
        }

        if (array_key_exists("SLInstance",$param) and $param["SLInstance"] !== null) {
            $this->SLInstance = [];
            foreach ($param["SLInstance"] as $key => $value){
                $obj = new SLInstance();
                $obj->deserialize($value);
                array_push($this->SLInstance, $obj);
            }
        }

        if (array_key_exists("RequestId",$param) and $param["RequestId"] !== null) {
            $this->RequestId = $param["RequestId"];
        }
    }
}
